home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue35 / tobject / ObjArrTestFm.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-03-23  |  3.2 KB  |  146 lines

  1. unit ObjArrTestFm;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls,
  8.   ObjectArrayUnit;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     NormalBtn: TButton;
  13.     Memo1: TMemo;
  14.     FastBtn: TButton;
  15.     FasterBtn: TButton;
  16.     procedure NormalBtnClick(Sender: TObject);
  17.     procedure FastBtnClick(Sender: TObject);
  18.     procedure FasterBtnClick(Sender: TObject);
  19.   private
  20.     { Private declarations }
  21.   public
  22.     { Public declarations }
  23.   end;
  24.  
  25. var
  26.   Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. {$R *.DFM}
  31.  
  32. {$O-}
  33. procedure CreateObjectArray(AllocateCount: Cardinal);
  34. var
  35.   i : integer;
  36.   List: TList;
  37.   TinyObject: TTinyObject;
  38. begin
  39.   List := TList.Create;
  40.   try
  41.     List.Capacity := AllocateCount;
  42.     for i := 0 to AllocateCount-1 do
  43.     begin
  44.       TinyObject := TTinyObject.Create;
  45.       TinyObject.Value := i;
  46.       TinyObject.Name := 'ABC';
  47.       List.Add(TinyObject);
  48.     end;
  49.   finally
  50.     for i := 0 to List.Count-1 do
  51.       TTinyObject(List[i]).Free;
  52.     List.Free;
  53.   end;
  54. end;
  55.  
  56. procedure CreateObjectArrayFast(AllocateCount: Cardinal);
  57. var
  58.   i : integer;
  59.   List: TList;
  60.   TinyObject: TTinyObject;
  61. begin
  62.   TFastTinyObject.InitObjectStore(AllocateCount);
  63.   try
  64.     List := TList.Create;
  65.     try
  66.       List.Capacity := AllocateCount;
  67.       for i := 0 to AllocateCount-1 do
  68.       begin
  69.         TinyObject := TFastTinyObject.Create;
  70.         TinyObject.Value := i;
  71.         TinyObject.Name := 'ABC';
  72.         List.Add(TinyObject);
  73.       end;
  74.     finally
  75.       for i := 0 to List.Count-1 do
  76.         TObject(List[i]).Free;
  77.       List.Free;
  78.     end;
  79.   finally
  80.     TFastTinyObject.FreeObjectStore;
  81.   end;
  82. end;
  83.  
  84. procedure CreateObjectArrayFaster(AllocateCount: Cardinal);
  85. var
  86.   i : integer;
  87.   List: TList;
  88.   TinyObject: TTinyObject;
  89. begin
  90.   TFasterTinyObject.InitObjectStore(AllocateCount);
  91.   try
  92.     List := TList.Create;
  93.     try
  94.       List.Capacity := AllocateCount;
  95.       for i := 0 to AllocateCount-1 do
  96.       begin
  97.         TinyObject := TFasterTinyObject.Create;
  98.         TinyObject.Value := i;
  99.         TinyObject.Name := 'ABC';
  100.         List.Add(TinyObject);
  101.       end;
  102.     finally
  103.       for i := 0 to List.Count-1 do
  104.         TObject(List[i]).Free;
  105.       List.Free;
  106.     end;
  107.   finally
  108.     TFasterTinyObject.FreeObjectStore;
  109.   end;
  110. end;
  111.  
  112. const
  113.   AllocateCount = 100000;
  114.  
  115. procedure TForm1.NormalBtnClick(Sender: TObject);
  116. var
  117.   StartTick, EndTick: Cardinal;
  118. begin
  119.   StartTick := GetTickCount;
  120.   CreateObjectArray(AllocateCount);
  121.   EndTick := GetTickCount;
  122.   Memo1.Lines.Add(Format('Normal Create: %d', [EndTick-StartTick]));
  123. end;
  124.  
  125. procedure TForm1.FastBtnClick(Sender: TObject);
  126. var
  127.   StartTick, EndTick: Cardinal;
  128. begin
  129.   StartTick := GetTickCount;
  130.   CreateObjectArrayFast(AllocateCount);
  131.   EndTick := GetTickCount;
  132.   Memo1.Lines.Add(Format('Fast Create: %d', [EndTick-StartTick]));
  133. end;
  134.  
  135. procedure TForm1.FasterBtnClick(Sender: TObject);
  136. var
  137.   StartTick, EndTick: Cardinal;
  138. begin
  139.   StartTick := GetTickCount;
  140.   CreateObjectArrayFaster(AllocateCount);
  141.   EndTick := GetTickCount;
  142.   Memo1.Lines.Add(Format('Faster Create: %d', [EndTick-StartTick]));
  143. end;
  144.  
  145. end.
  146.